﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Biblioteca.Interfaces;
using System.Data;
using Biblioteca.Filters;
namespace Biblioteca.Models
{
    public class MaterialModel : IMaterial
    {
        private BibliotecaStore db;

        public MaterialModel(BibliotecaStore data)
        {
            this.db = data;
        }
        /*
         Creo el material y los ejemplares corresponientes
         */
        public void crearMaterial(Material m)
        {
            db.Materials.AddObject(m);
            db.SaveChanges();
           
        }

        public void eliminarMaterial(Material m)
        {
            db.Materials.DeleteObject(m);
            db.SaveChanges();
        }

        public void modificarMaterial(Material material)
        {
            db.Materials.Attach(material);
            db.ObjectStateManager.ChangeObjectState(material, EntityState.Modified);
            db.SaveChanges();
        }

        [CacheResult]
        public Material getSingle(int id)
        {
            return db.Materials.Single(m => m.IdMaterial == id);
        }

        [CacheResult(10)]
        public IList<Material> getAll()
        {
            return db.Materials.Include("Editorial1").Include("TipoMaterial").ToList();
        }

        
        public IList<Material> obtainFilter(string autor, string titulo, string tema, string isbn)
        {
            var materiales = this.db.Materials.Include("Autors").ToList();
            if (!titulo.Equals(""))
            {
                materiales = materiales.Where(m => m.Titulo.Contains(titulo)).ToList();
            }
            if (!isbn.Equals(""))
            {
                materiales = materiales.Where(m => m.ISBN == isbn).ToList();
            }
            if (!tema.Equals(""))
            {
                materiales = materiales.Where(t => t.Temas.Any(i => i.IdTema == int.Parse(tema))).ToList();
            }
            if (!autor.Equals(""))
            {
                materiales = materiales.Where(a => a.Autors.Any(at => at.IdAutor == int.Parse(autor))).ToList();
            }
            
            return materiales;
        }
    }
}